libcxx initial import git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@103490 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/new b/include/new new file mode 100644 index 0000000..9d7ed45 --- /dev/null +++ b/include/new
@@ -0,0 +1,106 @@ +// -*- C++ -*- +//===----------------------------- new ------------------------------------===// +// +// ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef _LIBCPP_NEW +#define _LIBCPP_NEW + +/* + new synopsis + +namespace std +{ + +class bad_alloc + : public exception +{ +public: + bad_alloc() throw(); + bad_alloc(const bad_alloc&) throw(); + bad_alloc& operator=(const bad_alloc&) throw(); + virtual ~bad_alloc() throw(); + virtual const char* what() const throw(); +}; + +struct nothrow_t {}; +extern const nothrow_t nothrow; +typedef void (*new_handler)(); +new_handler set_new_handler(new_handler new_p) throw(); + +} // std + +void* operator new(std::size_t size) throw(std::bad_alloc); // replaceable +void* operator new(std::size_t size, const std::nothrow_t&) throw(); // replaceable +void operator delete(void* ptr) throw(); // replaceable +void operator delete(void* ptr, const std::nothrow_t&) throw(); // replaceable + +void* operator new[](std::size_t size) throw(std::bad_alloc); // replaceable +void* operator new[](std::size_t size, const std::nothrow_t&) throw(); // replaceable +void operator delete[](void* ptr) throw(); // replaceable +void operator delete[](void* ptr, const std::nothrow_t&) throw(); // replaceable + +void* operator new (std::size_t size, void* ptr) throw(); +void* operator new[](std::size_t size, void* ptr) throw(); +void operator delete (void* ptr, void*) throw(); +void operator delete[](void* ptr, void*) throw(); + +*/ + +#include <__config> +#include <exception> +#include <cstddef> + +#pragma GCC system_header + +namespace std // purposefully not using versioning namespace +{ + +class _LIBCPP_EXCEPTION_ABI bad_alloc + : public exception +{ +public: + _LIBCPP_INLINE_VISIBILITY bad_alloc() throw() {} + virtual ~bad_alloc() throw(); + virtual const char* what() const throw(); +}; + +class _LIBCPP_EXCEPTION_ABI bad_array_new_length + : public bad_alloc +{ +public: + _LIBCPP_INLINE_VISIBILITY bad_array_new_length() throw() {} + virtual ~bad_array_new_length() throw(); + virtual const char* what() const throw(); +}; + +void __throw_bad_alloc(); + +struct nothrow_t {}; +extern _LIBCPP_VISIBLE const nothrow_t nothrow; +typedef void (*new_handler)(); +_LIBCPP_VISIBLE new_handler set_new_handler(new_handler) throw(); + +} // std + +_LIBCPP_VISIBLE void* operator new(std::size_t) throw(std::bad_alloc); +_LIBCPP_VISIBLE void* operator new(std::size_t, const std::nothrow_t&) throw(); +_LIBCPP_VISIBLE void operator delete(void*) throw(); +_LIBCPP_VISIBLE void operator delete(void*, const std::nothrow_t&) throw(); + +_LIBCPP_VISIBLE void* operator new[](std::size_t) throw(std::bad_alloc); +_LIBCPP_VISIBLE void* operator new[](std::size_t, const std::nothrow_t&) throw(); +_LIBCPP_VISIBLE void operator delete[](void*) throw(); +_LIBCPP_VISIBLE void operator delete[](void*, const std::nothrow_t&) throw(); + +_LIBCPP_INLINE_VISIBILITY inline void* operator new (std::size_t, void* __p) throw() {return __p;} +_LIBCPP_INLINE_VISIBILITY inline void* operator new[](std::size_t, void* __p) throw() {return __p;} +_LIBCPP_INLINE_VISIBILITY inline void operator delete (void*, void*) throw() {} +_LIBCPP_INLINE_VISIBILITY inline void operator delete[](void*, void*) throw() {} + +#endif // _LIBCPP_NEW